﻿using GameFramework;
using System.Diagnostics;

namespace GFTest
{
    public static class PLog
    {
        /// <summary>
        /// 记录调试级别日志，仅在带有 DEBUG 预编译选项时产生。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        [Conditional("DEBUG")]
        public static void Debug(Programmer programmer, object message)
        {
            Log.Debug(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 记录调试级别日志，仅在带有 DEBUG 预编译选项时产生。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        [Conditional("DEBUG")]
        public static void Debug(Programmer programmer, string message)
        {
            Log.Debug(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 记录调试级别日志，仅在带有 DEBUG 预编译选项时产生。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        [Conditional("DEBUG")]
        public static void Debug(Programmer programmer, string format, object arg0)
        {
            Log.Debug(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0)));
        }

        /// <summary>
        /// 记录调试级别日志，仅在带有 DEBUG 预编译选项时产生。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        [Conditional("DEBUG")]
        public static void Debug(Programmer programmer, string format, object arg0, object arg1)
        {
            Log.Debug(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1)));
        }

        /// <summary>
        /// 记录调试级别日志，仅在带有 DEBUG 预编译选项时产生。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        [Conditional("DEBUG")]
        public static void Debug(Programmer programmer, string format, object arg0, object arg1, object arg2)
        {
            Log.Debug(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1, arg2)));
        }

        /// <summary>
        /// 记录调试级别日志，仅在带有 DEBUG 预编译选项时产生。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="args">日志参数。</param>
        [Conditional("DEBUG")]
        public static void Debug(Programmer programmer, string format, params object[] args)
        {
            Log.Debug(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, args)));
        }

        /// <summary>
        /// 打印信息级别日志，用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容</param>
        public static void Info(Programmer programmer, object message)
        {
            Log.Info(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印信息级别日志，用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容</param>
        public static void Info(Programmer programmer, string message)
        {
            Log.Info(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印信息级别日志，用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        public static void Info(Programmer programmer, string format, object arg0)
        {
            Log.Info(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0)));
        }

        /// <summary>
        /// 打印信息级别日志，用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        public static void Info(Programmer programmer, string format, object arg0, object arg1)
        {
            Log.Info(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1)));
        }

        /// <summary>
        /// 打印信息级别日志，用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Info(Programmer programmer, string format, object arg0, object arg1, object arg2)
        {
            Log.Info(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1, arg2)));
        }

        /// <summary>
        /// 打印信息级别日志，用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="args">日志参数。</param>
        public static void Info(Programmer programmer, string format, params object[] args)
        {
            Log.Info(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, args)));
        }

        /// <summary>
        /// 打印警告级别日志，建议在发生局部功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        public static void Warning(Programmer programmer, object message)
        {
            Log.Warning(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印警告级别日志，建议在发生局部功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        public static void Warning(Programmer programmer, string message)
        {
            Log.Warning(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印警告级别日志，建议在发生局部功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        public static void Warning(Programmer programmer, string format, object arg0)
        {
            Log.Warning(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0)));
        }

        /// <summary>
        /// 打印警告级别日志，建议在发生局部功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        public static void Warning(Programmer programmer, string format, object arg0, object arg1)
        {
            Log.Warning(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1)));
        }

        /// <summary>
        /// 打印警告级别日志，建议在发生局部功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Warning(Programmer programmer, string format, object arg0, object arg1, object arg2)
        {
            Log.Warning(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1, arg2)));
        }

        /// <summary>
        /// 打印警告级别日志，建议在发生局部功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="args">日志参数。</param>
        public static void Warning(Programmer programmer, string format, params object[] args)
        {
            Log.Warning(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, args)));
        }

        /// <summary>
        /// 打印错误级别日志，建议在发生功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        public static void Error(Programmer programmer, object message)
        {
            Log.Error(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印错误级别日志，建议在发生功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        public static void Error(Programmer programmer, string message)
        {
            Log.Error(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印错误级别日志，建议在发生功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        public static void Error(Programmer programmer, string format, object arg0)
        {
            Log.Error(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0)));
        }

        /// <summary>
        /// 打印错误级别日志，建议在发生功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        public static void Error(Programmer programmer, string format, object arg0, object arg1)
        {
            Log.Error(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1)));
        }

        /// <summary>
        /// 打印错误级别日志，建议在发生功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Error(Programmer programmer, string format, object arg0, object arg1, object arg2)
        {
            Log.Error(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1, arg2)));
        }

        /// <summary>
        /// 打印错误级别日志，建议在发生功能逻辑错误，但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="args">日志参数。</param>
        public static void Error(Programmer programmer, string format, params object[] args)
        {
            Log.Error(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, args)));
        }

        /// <summary>
        /// 打印严重错误级别日志，建议在发生严重错误，可能导致游戏崩溃或异常时使用，此时应尝试重启进程或重建游戏框架。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        public static void Fatal(Programmer programmer, object message)
        {
            Log.Fatal(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印严重错误级别日志，建议在发生严重错误，可能导致游戏崩溃或异常时使用，此时应尝试重启进程或重建游戏框架。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="message">日志内容。</param>
        public static void Fatal(Programmer programmer, string message)
        {
            Log.Fatal(ReferencePool.Acquire<PLogData>().Fill(programmer, message));
        }

        /// <summary>
        /// 打印严重错误级别日志，建议在发生严重错误，可能导致游戏崩溃或异常时使用，此时应尝试重启进程或重建游戏框架。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        public static void Fatal(Programmer programmer, string format, object arg0)
        {
            Log.Fatal(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0)));
        }

        /// <summary>
        /// 打印严重错误级别日志，建议在发生严重错误，可能导致游戏崩溃或异常时使用，此时应尝试重启进程或重建游戏框架。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        public static void Fatal(Programmer programmer, string format, object arg0, object arg1)
        {
            Log.Fatal(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1)));
        }

        /// <summary>
        /// 打印严重错误级别日志，建议在发生严重错误，可能导致游戏崩溃或异常时使用，此时应尝试重启进程或重建游戏框架。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="arg0">日志参数 0。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Fatal(Programmer programmer, string format, object arg0, object arg1, object arg2)
        {
            Log.Fatal(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, arg0, arg1, arg2)));
        }

        /// <summary>
        /// 打印严重错误级别日志，建议在发生严重错误，可能导致游戏崩溃或异常时使用，此时应尝试重启进程或重建游戏框架。
        /// </summary>
        /// <param name="programmer">关心日志的程序。</param>
        /// <param name="format">日志格式。</param>
        /// <param name="args">日志参数。</param>
        public static void Fatal(Programmer programmer, string format, params object[] args)
        {
            Log.Fatal(ReferencePool.Acquire<PLogData>().Fill(programmer, string.Format(format, args)));
        }
    }
}
